package com.ruoyi.user.dao;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.user.domain.UserDetail;
import com.ruoyi.user.mapper.UserDetailMapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import javax.annotation.Resource;
import java.util.List;

/**
 * @author: houyong
 * @date: 2025年11月14日 14:44
 */
@Repository
public class UserDetailDao extends ServiceImpl<UserDetailMapper, UserDetail> {
    @Resource
    private UserDetailMapper userDetailMapper;

    /**
     * 根据手机号码获取用户详细信息
     *
     * @param phone 手机号码
     * @return 用户详细信息对象，如果未找到则返回null
     */
    public UserDetail getUserDetailByPhone(String phone) {
        // 使用 LambdaQueryWrapper 构造查询条件
        LambdaQueryWrapper<UserDetail> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(UserDetail::getPhone, phone);
        wrapper.eq(UserDetail::getStatus, 1);
        return this.getOne(wrapper);
    }


    /**
     * 根据邮箱地址获取用户详细信息
     *
     * @param email 用户邮箱地址
     * @return 用户详细信息对象，如果未找到则返回null
     */
    public UserDetail getUserDetailByEmail(String email) {
        // 使用 LambdaQueryWrapper 构造查询条件
        LambdaQueryWrapper<UserDetail> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(UserDetail::getEmail, email);
        wrapper.eq(UserDetail::getStatus, 1);
        return this.getOne(wrapper);
    }


    /**
     * 根据用户ID获取用户详细信息
     *
     * @param uid 用户唯一标识符
     * @return 用户详细信息对象，如果未找到则返回null
     */
    public UserDetail getUserDetailByUid(String uid) {
        // 使用 LambdaQueryWrapper 构造查询条件
        LambdaQueryWrapper<UserDetail> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(UserDetail::getUid, uid);
        return this.getOne(wrapper);
    }


    /**
     * 根据用户ID列表获取用户详情列表
     *
     * @param uidList 用户ID列表
     * @return 用户详情列表
     */
    public List<UserDetail> getUserList(List<String> uidList) {
        // 构造查询条件，根据用户ID列表进行in查询
        LambdaQueryWrapper<UserDetail> wrapper = new LambdaQueryWrapper<>();
        wrapper.in(UserDetail::getUid, uidList);
        return this.list(wrapper);
    }


    /**
     * 更新用户手机号码
     *
     * @param uid      用户唯一标识符
     * @param newPhone 新的手机号码
     */
    public void updatePhone(@Param("uid") String uid, @Param("newPhone") String newPhone) {
        // 获取用户详细信息
        UserDetail userDetailByUid = getUserDetailByUid(uid);
        // 设置新的手机号码
        userDetailByUid.setPhone(newPhone);
        // 更新用户详细信息
        updateUserDetail(userDetailByUid);
    }


    /**
     * 更新用户邮箱地址
     *
     * @param uid      用户唯一标识符
     * @param newEmail 新的邮箱地址
     */
    public void updateEmail(@Param("uid") String uid, @Param("newEmail") String newEmail) {
        // 获取用户详细信息
        UserDetail userDetailByUid = getUserDetailByUid(uid);
        // 设置新的邮箱地址
        userDetailByUid.setEmail(newEmail);
        // 更新用户详细信息
        updateUserDetail(userDetailByUid);
    }


    /**
     * 更新用户信息
     *
     * @param userDetail 用户详细信息对象，包含需要更新的用户数据
     */
    public void updateUserInfo(UserDetail userDetail) {
        updateUserDetail(userDetail);
    }


    /**
     * 更新用户详细信息
     *
     * @param userDetail 用户详细信息对象，包含需要更新的用户数据
     */
    public void updateUserDetail(UserDetail userDetail) {
        // 调用mapper层方法执行用户详细信息更新操作
        userDetailMapper.updateUserDetail(userDetail);
    }

}